/**
 * 
 * 
 * 
 */

 function Person(name,age,sex='女'){
    this.name=name;
    this.age=age;
    this.sex=sex;
}

//手动实现new
const objectFactory=function(){
    // console.log(arguments,'+++++');
    var obj =new Object();
    //构造一下
    //列表 队列
    //arguments是一个伪数组 可以循环但不具有更多的方法
    // var varConstructor = Array.from(arguments).shift(); 将一个伪数组变成一个真正的数组
    var varConstructor = [].shift.call(arguments);
    // console.log(varConstructor);
    varConstructor.call(obj,...arguments)// 传参数  按顺序传参
    obj.__proto__ =varConstructor.prototype;
    return obj;
}
//js为什么要有prototype(原型)？  
//实例之间通过实列除了属性各有各的(constructor) 通过prototype对象间的共享方法 减少内存
//构造函数中一般只定义变量  方法放在prototype中
const obj = objectFactory(Person,'吴亦凡',18,'男')
console.log(obj,'-------');
console.log(Person.prototype);